/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pushy.server;

import java.util.Arrays;

/**
 *
 * @author pkoch1
 */
public class Objekt {
    public static int RECHTS = 0;
    public static int UNTEN = 1;
    public static int LINKS = 2;
    public static int OBEN = 3;
    
    protected String farbe;
    
    protected String name = "objekt";
    
    protected int id = 0;

    public String getName() {
        return name;
    }
    
    public String getFullName() {
        if(farbe == null) {
            return name;
        }
        return name + "-" + farbe;
    }
    
    public String getFarbe() {
        return farbe;
    }
    
    public int getId() {
        return id;
    }

    public void setFarbe(String farbe) {
        this.farbe = farbe;
    }

    public int[] getKoordinaten() {
        return koordinaten;
    }

    public void setKoordinaten(int[] koordinaten) {
        this.koordinaten = koordinaten;
    }

    public Level getLevel() {
        return level;
    }

    public void setLevel(Level level) {
        this.level = level;
    }

    public int getRichtung() {
        return richtung;
    }

    public void setRichtung(int richtung) {
        this.richtung = richtung;
    }
    
    public void setRichtung(String richtung) {
        if(richtung.equals("Left")) {
            setRichtung(Objekt.LINKS);
        }else if(richtung.equals("Right")) {
            setRichtung(Objekt.RECHTS);
        }else if(richtung.equals("Up")) {
            setRichtung(Objekt.OBEN);
        }else if(richtung.equals("Down")) {
            setRichtung(Objekt.UNTEN);
        }
    }
    
    /**
     * Gibt ein Objekt aus einem String zurück. Der String muss in folgender Form vorliegen:
     * Kleingeschrieben die Klasse, evtl. -farbe angehängt!
     * @param s
     * @param koordinaten
     * @param level
     * @return GIBT IMMER NULL ZURÜCK WIESO!?!??!?!?
     */
    static Objekt fromString(String str, int[] koordinaten, Level level) {
        Objekt o = null;
        String[] split = str.split("-");
        String s = split[0];
        if(!str.contains("-")) s = str;
        if(s.equals("boden")) {
            o = new Boden(koordinaten, level);
        }else if(s.contains("farbball")) {
            o = new Farbball(koordinaten, level); //ToDo: Farben, z.b. farbball-rot, farbball-blau
        }else if(s.contains("farbfeld")) {
            o = new Farbfeld(koordinaten, level); //ToDo: s.o.
        }else if(s.equals("pushy")) {
            o = new Pushy(koordinaten, level); //ToDo: s.o.
        }else if(s.equals("wand")) {
            o = new Wand(koordinaten, level);
        }else if(s.endsWith("ziel")) {
            o = new Ziel(koordinaten, level); //ToDo: s.o.
        }
        
        if(o != null && split.length == 2) {
            o.setFarbe(split[1]);
        }
        
        return o;
    }
    
    protected int[] koordinaten = {0,0,0};
    protected Level level;
    protected int richtung = 0;
    
    public Objekt(int[] koordinaten, Level level) {
        this.level = level;
        switch(koordinaten.length) {
            case 1:
                this.koordinaten[0] = koordinaten[0];
                break;
            case 2:
                this.koordinaten[0] = koordinaten[0];
                this.koordinaten[1] = koordinaten[1];
                break;
            default:
                this.koordinaten = koordinaten;
                break;
        }
    }
    
    public void drehen(int richtung) {
        while(richtung > 3) {richtung = richtung-4;}
        this.richtung = richtung;
    }

    public int x() {
        return koordinaten[0];
    }
    
    public int y() {
        return koordinaten[1];
    }
    
    public int z() {
        return koordinaten[2];
    }
}
